home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_03 / saks / shape1.cpp < prev    next >
C/C++ Source or Header  |  1994-01-12  |  1KB  |  56 lines

  1. Listing 2 - a crude application of the shape hierarchy in Listing 1
  2.  
  3. //
  4. // 'clone_all' clones shape array 'sa1' with 'n'
  5. // elements
  6. //
  7. shape **clone_all(shape *sa1[], size_t n)
  8.     {
  9.     shape **sa2 = new shape *[n];
  10.     for (size_t i = 0; i < n; ++i)
  11.         sa2[i] = sa1[i]->clone();
  12.     return sa2;
  13.     }
  14.  
  15. //
  16. // 'largest' returns the shape with the largest
  17. // area from shape array 'sa' with 'n' elements
  18. //
  19. shape *largest(shape *sa[], size_t n)
  20.     {
  21.     shape *s = 0;
  22.     double m = 0;
  23.     for (size_t i = 0; i < n; ++i)
  24.         if (sa[i]->area() > m)
  25.             {
  26.             m = sa[i]->area();
  27.             s = sa[i];
  28.             }
  29.     return s;
  30.     }
  31.  
  32. int main()
  33.     {
  34.     const int N = 4;
  35.     shape *s[N];
  36.     shape *ls;
  37.     s[0] = new circle(shape::RED, 2);
  38.     s[1] = new triangle(shape::BLUE, 5, 6, asin(0.8));
  39.     s[2] = new rectangle(shape::RED, 3, 4);
  40.     s[3] = new circle(shape::GREEN, 3);
  41.     cout << "The shapes are:\n";
  42.     for (int i = 0; i < N; ++i)
  43.         cout << i << ")\t" << *s[i] << '\n';
  44.     cout << '\n';
  45.     shape **cs = clone_all(s, N);
  46.     cout << "The cloned shapes are:\n";
  47.     for (i = 0; i < N; ++i)
  48.         cout << i << ")\t" << *cs[i] << '\n';
  49.     cout << '\n';
  50.     ls = largest(cs, N);
  51.     cout << "The shape with the largest area is a...\n\t";
  52.     cout << *ls << ".\n";
  53.     cout << "Its area is " << ls->area() << ".\n";
  54.     return 0;
  55.     }
  56.